LUDI está implementado en tres capas: kernel, librería y juego del usuario.


1 Nivel de juego. Para hacer un juego LUDI, suponiendo que sea en un idioma ya soportado en LUDI.
	
	Ruta: /client/data/games/<gameName>
	Cada juego <gameName> viene especificado en varios ficheros:

	1.1 - about.json: Da información, sobre el propio juego: como el autor, título, y para cada idiomas en que está soportado, nombre del traductor y breve descripción del juego.

	1.2 - game_world.json: En este fichero se declaran los items del juego (objetos, localidades y personajes). El autor también del juego puede reemplazar las caracterísitcas suministradas por la librería (atributos, acciones y direcciones), así como implementar las suyas propias.

	1.3 - por cada idioma (XX) del juego:
	
	1.3.1 - game_reactions.js: Programa en javascript que puede sobreescribir reacciones por defecto definidas a nivel de librería.
	1.3.1 - gameMessagesXX.json: los mensajes estáticos del juego. Tienen la particularidad  de que pueden ser traducibles directamente por el Google Translator Toolkit.
	1.3.2 - gameMessagesByLanXX.json: información gramatical asociada a los items y acciones del juego, como el género y número, si procede.
	1.3.3 - directorios audio e images: sonidos e imágenes específicos del juego en cuestión.


2 Nivel de librería. Define acciones(verbos) usables en todos los juegos, con sus reacciones por defecto. También predefine algunos tipos de atributos y direcciones (norte, sur,...) disponibles.

	Ruta: /client/data/lib
	La información de librería consiste en:

	2.1- lib_world.json: declaración de acciones (verbos), atributos (características de objetos) y direcciones (conexiones desde localidades) que se suministran de manera estándar para el desarrollo de juegos.

	2.2 - lib_reactions.js (en /client/lib): Programa en javascript con las reacciones por defecto definidas a nivel de librería.

	2.3- Por cada idioma XX soportado por LUDI:
	2.3.1 - libMessagesXX.json
	2.3.2 - libMessagesByLanXX.json

3 Nivel de kernel. Define los mensajes de los menús para cada uno de los idiomas soportados.

	Ruta: /client/data/kernel
	
	Por cada idioma XX soportado:
	
	3.1 kernelXX.json: los mensajes del núcleo del programa que permiten elegir un juego y cargarlo.
	3.2 ludi_language.js (en /client/src): programación de asuntos dependientes del idioma, para la renderización de textos finales.

---------------------------------------------------------------------------------
	
Nota: a partir de aquí la documentación no está actualizada: para hacerte una idea de cómo se programa con LUDI, mira los ficheros siguientes del juego tresfuentes:
	(ruta: \client\data\games\tresfuentes)
	game_world.json
	game_reactions.js
	gameMessagesES.json 
	gameMessagesByLanES.json
	
---------------------------------------------------------------------------------

Valores de los items (game_world.json):


1 - Items de personaje jugador (el item 0 debe ser el protagonista del juego; pero podrá haber más de uno, aunque sólo se puede controlar a uno a la vez)

		{ 	"id": "harry", // identificador del item
            "type": "pc", // indica que es un Player Character (PJ en español)
            "loc": "loc_dunvojo", // inidica la localidad inicial
            "att": { // atributos definidos sobre este item
                "Soifo": {"state":"50"} ,  // valor inicial del atributo especificado
                "Malsato": {"state":"20"}  // valor inicial del atributo especificado
            },
            "state": {	// valores específicos para un PC
                "turns": 0,  // número de turnos jugados
                "score": 0,  // puntuación
                "items": []  // "memoria" del personaje: contendrá qué sabe el personaje del mundo: objetos y localidades conocidos; inicialmente no conoce nada
            }
        },
		
2- Items de localidades
		{   "id": "loc_dunvojo", // identificador del item
            "type": "loc",	// indica que es de tipo localidad
			// podría tener atributos, como el ejemplo anterior, pero en este caso no tiene
            "address": [	// conexiones a otras localidades desde la que se puede ir desde esta localidad
                {
                    "dir": "d180", // identificador del sur (grados desde el norte)
                    "target": "loc_urbo", // identificador de la localidad destino
					"lookDir":"EL_duonvojo_AL_urbo" // opcional: indica el id del mensaje que se mostrará si se mira hacia esta dirección
					// si en, como veremos, se le asocia el método look_dir() al item, no se llegará a usar nunca este valor
					
                }
            ]
        },
		
3- Items de objetos

		{
            "id": "obj_buterita_pano", // identificador del item
            "type": "obj",  // indica que es de tipo localidad
            "loc": "pc.harry", // inidica la localidad inicial
            "att": { // atributos del objeto
				"pezo": {"state":"4"},			// valor inicial del atributo especificado
				"grando": {"state":"4"},		// valor inicial del atributo especificado
				"mangheblo": {"state":"70"}		// valor inicial del atributo especificado
			}
        },
		
4- Items de tipo NPC 
	Similar a los tipo "obj", pero indica que es un Non-Player Character (PNJ en español)
	
	La única diferencia entre un obj y un npc es que sobre un npc se activan algunas acciones, como hablar-con.

--------------------------------------------------------------------------------

Definición de los atributos:
	+ id del atributo
	+ properties: []  		// propiedades del atributo
		- {id, default} 	// cada una de las propiedades (default puede ser "undefined")
	+ restrictedTo: [] 		// tipos  que lo pueden tener
	+ asignedTo:[] 			// tipos que deben tener este atributo
	+ enabledActions:[]		// acciones que habilita como objeto 1
	+ enabledActions_O2:[]	// acciones que habilita como objeto2 

		
---------------------------------------------------------------------------------


Métodos implementados hasta ahora


ACCIONES (verbos):

id: nombre de la acción

enabled (): devuelve cierto cuando se quiere que se muestre como una opción para el objeto actual (y objeto secundario, opcional)

reaction(): reacción genérica al ejecutar la acción sobre el objeto actual (y objeto secundario, opcional)

DIRECCIONES (conexiones entre localidades):

id: nombre de la dirección

ATRIBUTOS (adjetivos)

id: nombre del atributo

desc(): para indicar qué se muestra del objeto que tenga ese atributo.

ITEMS (objetos, localidades y personajes)

id: nombre del item

desc(): descripción dinámica del item.
firstDesc(): primera vez que se describe.
turn() cuando el item hace algo en el turno del mundo.

look_dir(dirIndex): aplicado a una localidad, muestra mensajes cuando se mira hacia esa dirección

precondToGo(): aplicado a una localidad, para determinar cuando se permite ir en determinada dirección.

Reacciones específicas, con el nombre de la acción que sea

Ejemplos:

caja.open() ejecutará la reacción específica de abrir sobre la caja, en vez de ejecutar el método genérico.

flutist.talk(): para mostrar lo que dice el PJ, así como generar tablas de respuestas permitidas que decirle.





